// import Vue from 'vue'
// import Vuex from 'vuex'
// import getters from './getters'

// import { createPersistedState, createSharedMutations } from 'vuex-electron'

// import modules from './modules'

// Vue.use(Vuex)

// export default new Vuex.Store({
//   modules,
//   getters,
//   plugins: [
//     createPersistedState(),
//     createSharedMutations()
//   ],
//   strict: process.env.NODE_ENV !== 'production'
// })
import Vue from 'vue'
import Vuex from 'vuex'
// import {
// 	createPersistedState,
// 	createSharedMutations
// } from 'vuex-electron'
import getters from './getters'

Vue.use(Vuex)
/**
 * 通过执行require.context函数获取一个特定的上下文,主要用来实现
 * 自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,
 * 可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块
 * require.context函数接受三个参数
 * 		1.directory {String} -读取文件的路径
 * 		2.useSubdirectories {Boolean} -是否遍历文件的子目录
 * 		3.regExp {RegExp} -匹配文件的正则
 * require.context函数执行后返回的是一个函数,并且这个函数有3个属性
 * 		1.resolve {Function} -接受一个参数request,request为test文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
 * 		2.keys {Function} -返回匹配成功模块的名字组成的数组
 * 		3.id {String} -执行环境的id,返回的是一个字符串,主要用在module.hot.accept,应该是热加载
 * **/
const modulesFiles = require.context('./modules', true, /\.js$/)
//不需要从“应用程序”导入模块`
//它将自动要求模块文件中的所有vuex模块
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
	// set './app.js' => 'app'
	const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
	const value = modulesFiles(modulePath)
	modules[moduleName] = value.default
	return modules
}, {})
export default new Vuex.Store({
	modules,
	getters,
	// plugins: [
	// 	createPersistedState(),
	// 	createSharedMutations()
	// ],
	strict: process.env.NODE_ENV !== 'production'
})
